package com.xuxk.project.oauth.util;

import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;


/**
 * @author  许孝康
 * @date 2019/7/2
 * @company 橙云科技有限公司
 */
public class SpelParserUtil {

    private static ExpressionParser parser = new SpelExpressionParser();


    /**
     *
     * @param key el表达式字符串，占位符以#开头
     * @param paramsNames  形参名称，可以理解为占位符名称
     * @param args   参数值，可以理解为占位符真实的值
     * @return  返回el表达式经过参数替换后的字符串值
     */
    public static Object getKey(String key, String[] paramsNames, Object[] args) {
        //将key字符串解析为el表达式
        Expression exp = parser.parseExpression(key);
        //初始化赋值上下文
        EvaluationContext context = new StandardEvaluationContext();
        if(args.length<=0){
            return null;
        }
        //将形参和形参值以配对的方式配置到赋值上下文中
        for (int i =0;i<args.length;i++) {
            context.setVariable(paramsNames[i], args[i]);
        }
        //根据赋值上下文运算el表达式
        return exp.getValue(context, Object.class);
    }

}

